package com.cloud.bssp.thread;

/**
 * Description: Volatile同步
 * Create Date: 2020/8/12
 * Modified By：
 * Modified Date：
 * Why &amp; What is modified：
 * Copyright (C) 2020 mvtech.com.cn All Right Reserved.
 *
 * @author weirx
 * @version 1.0
 */
public class Volatile {

    //    /**
//     * 同步代码块
//     */
//    static class Inventory {
//
//        //库存数量
//        private volatile int num = 100;
//
//        //增加库存
//        public void add(int n) {
//            num += n;
//            System.out.println("增加库存后的数量=" + num);
//        }
//
//        //减少库存
//        public void sub(int n) {
//            num -= n;
//            System.out.println("减少库存后的数量=" + num);
//        }
//    }
//
//    public static void main(String[] args) {
//        Inventory inventory = new Inventory();
//        for (int i = 0; i < 100; i++) {
//            new Thread(() -> {
//                inventory.add(1);
//            }).start();
//        }
//        for (int i = 0; i < 100; i++) {
//            new Thread(() -> {
//                inventory.sub(1);
//            }).start();
//        }
//    }
//*****************************************************************************

//    volatile boolean flag = true;
    boolean flag = true;
    /**
     * description: 以下代码合适能执行到输出“stop”
     * 1）对变量flag增加volatile关键字，使线程间可见
     * 2）在while循环中，增加一条System.out.println("hello");底层会触发缓存协议MESI（由汇编级的lock语句触发）。

     * @return: void
     * @author: weirx
     * @time: 2021/5/19 15:31
     */
    public void running() {

        System.out.println("running");
        while (this.flag) {
            System.out.println("hello");
        }
        System.out.println("stop");
    }


    public static void main(String[] args) throws InterruptedException {
        Volatile v = new Volatile();
        new Thread(() -> v.running()).start();
        Thread.sleep(1000);
        v.flag = false;
    }
}
